package flush

import "sync"

var (
	flushManagerOnce   sync.Once
	flushManagerSingle *FlushManager

	dbFlushConfigOnce     sync.Once
	redisFlushConfigOnce  sync.Once
	otherFlushConfigOnce  sync.Once
	dbFlushConfigModel    *FlushModel
	redisFlushConfigModel *FlushModel
	otherFlushConfigModel *FlushModel
)

type FlushManager struct {
	fg FileFlushConfig
}

func GetFlushManager() *FlushManager {
	flushManagerOnce.Do(func() {
		flushManagerSingle = &FlushManager{
			fg: GetFileFlushConfig(),
		}
	})
	return flushManagerSingle
}

func (fm *FlushManager) GetDBFlushConfigModel() *FlushModel {
	dbFlushConfigOnce.Do(func() {
		dbFlushConfigModel = fm.fg.GetDBFlushConfig()
	})
	return dbFlushConfigModel
}

func (fm *FlushManager) GetRedisFlushConfigModel() *FlushModel {
	redisFlushConfigOnce.Do(func() {
		redisFlushConfigModel = fm.fg.RedisFlushConfig()
	})
	return redisFlushConfigModel
}

func (fm *FlushManager) GetOtherFlushConfigModel() *FlushModel {
	otherFlushConfigOnce.Do(func() {
		otherFlushConfigModel = fm.fg.OtherFlushConfig()
	})
	return otherFlushConfigModel
}
